home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_10 / milam / localdat.c < prev    next >
C/C++ Source or Header  |  1994-07-12  |  2KB  |  48 lines

  1. /***************************************************************/
  2. /*              (c) Copyright 1993 by Stan Milam               */
  3. /*                                                             */
  4. /***************************************************************/
  5.  
  6. struct dt *localdate( date_t *arg ) {
  7.  
  8.     date_t   day;
  9.     unsigned year;
  10.     static   struct dt dt;
  11.     int      yday, mday, leapyear, month, wday;
  12.  
  13.     /***********************************************************/
  14.     /* Make sure we are in range.  Upper limit is 31-Dec-9999. */
  15.     /***********************************************************/
  16.  
  17.     day = *arg;
  18.     if ( day < (date_t) 1L || day > (date_t) MAXDATE ) return NULL;
  19.  
  20.     /***********************************************************/
  21.     /* 146097 is years_to_days(400).                           */
  22.     /***********************************************************/
  23.  
  24.     year = (unsigned) ((day * 400L) / 146097L + 1L);
  25.     while ( years_to_days(year + 1) < day ) year++;
  26.  
  27.     /***********************************************************/
  28.     /* Compute the remaining values from what we know already. */
  29.     /***********************************************************/
  30.  
  31.     leapyear = is_it_a_leap_year(year);
  32.     mday = (int) (day - years_to_days( year )); yday = mday - 1;
  33.     month = days_to_months( &mday, leapyear);
  34.     wday =  (int) (day % 7L);
  35.  
  36.     /***********************************************************/
  37.     /* Assign to our internal structure.                       */
  38.     /***********************************************************/
  39.  
  40.     dt.dt_year = year;
  41.     dt.dt_mday = mday;
  42.     dt.dt_yday = yday;
  43.     dt.dt_wday = wday;
  44.     dt.dt_month= month;
  45.     dt.dt_leap_year = leapyear;
  46.     return &dt;
  47. }
  48.